Many computer systems utilize a large number of servers to provide various computer services to their users. Maintaining the large number of servers is costly and time consuming. Oftentimes the servers are configured with outdated hardware, and software that depends to some extent on that hardware. A common solution in those cases is the use of virtual machines. Virtual machines are computer environments, one or more of which may be executed on a single physical computer, wherein each of those environments known as virtual machines, allows an operating system to operate independently as if it was operating on a single dedicated computer. The virtual machine (VM) provides virtualized hardware that the operating system is configured for and that may be mapped to actual hardware. The use of a virtual machine allows cost effective provision of the services provided by the physical server. Thus a virtual machine may be used for replacing an old server, providing a redundant online server for disaster recovery, replacing outdated hardware with new, and the like.
Modern computer operating systems such as Microsoft's Windows and Linux separate the operating system from variations in the underlying hardware through the use of meta layers such as hardware drivers and Hardware Adaptation Layers (HAL). These present the operating system with a consistent interface for accessing various hardware devices in varying configurations. The computer native operating system i.e. the operating system that contains the computing environment of interest and the environment which is to duplicated, has been customized to the hardware it operates on.
Commonly, in a process well known in the art, during the installation phase of an operating system the computer hardware configuration is detected and the relevant drivers and HAL installed. Once the operating system is installed and running it is often necessary to add or remove hardware without having to reinstall the operating system, applications, and data. By way of example, in x86 architecture based computers with a PCI bus the process has been largely automated with the advent of “Plug and Play” technology. Amongst other settings, this process automates the assignment of interrupts and I/O (Input and Output) ports and addresses. However transferring an image of an existing computer system to another is complicated. Certain hardware related problems oftentimes cause malfunction of the old software which expects a certain hardware configuration, or malfunction of the new hardware that is given instructions for hardware that is not available. While transfer of data only between computers may be relatively easy to achieve in most cases, the provision of the same environment in terms of functionality, including user and software settings, legacy software functionality, legacy peripherals functionality, and the like, presents significant difficulties.
The process of detecting new hardware and installing the relevant driver has many known implementations and variations. By way of example, U.S. Pat. No. 5,78,246 to Lichtman et al. describes a system for configuring device drivers. U.S. Pat. No. 5,655,148 to Richman et al, and others further describe different methods for identifying, loading, and configuring device drivers. U.S. Pat. No. 6,003,097 to Richman further discloses using registry data structure to load and configure various drivers. U.S. Pat. No. 6,530,018 to Fleming, describes an apparatus for automatically retrieving and installing drivers over a network. U.S. Pat. No. 6,718,463 to Malik goes further to describe an apparatus in which a computer system is booted to a point in which a file system is available, at which point drivers and other settings are copied from the system to removable storage, allowing the system to boot the computer from the removable storage providing user settings, software and similar functionality. (The terms “boot” and “Reboot” the computer implies starting a computer (physical or virtual) and providing operational control to a program, called an Operating System or OS in short)
U.S. Pat. No. 6,282,712 to Davis et al. provides for a system for a system for automatically installing software on heterogeneous computer systems. U.S. Pat. No. 6,934,956 to Allen discloses an apparatus and method for installing an operating system using an external configuration file.
U.S. Pat. No. 6,535,998 to Carbera et al. discloses a method and system for recovering from a system failure wherein the failed system is restored to a new system that has different hardware. Hardware state is preserved during a backup process, and following a failure, a restore is performed to the extent possible using that hardware state but on a system having a different hardware configuration. U.S. Pat. No. 6,944,867 to Cheston et al. discloses a method for providing a single preloaded software image onto multiple types of computer systems, using a hidden partition in the system disk drive.
US publication No 2005/0193245 to Hayden et al. discloses a disaster recovery system where the files that define the user environment of the file server are replicated to a virtual machine at a disaster recovery site. To switch over user access from the active site to the disaster recovery site, the disaster recovery system determines whether there are sufficient network interfaces and file system mounts at the disaster recovery site. If so, the required resources are reserved, and user access is switched over. If not, an operator is given a list of missing resources or discrepancies, and a choice of termination or forced failover. Interruptions during the failover can be avoided by maintaining a copy of user mappings and a copy of session information at the disaster recovery site, and keeping alive client-server connections and re-directing client requests from the active site to the disaster recovery site. This patent is an example of the difficulties presented in replicating the complete server environment into a virtual machine.
Virtual machines are also old in the art, and are readily available commercially, as well as methods of transferring an image of origin computer environment to the virtual machine or to another target computer. The common method of achieving this task is by rebooting the origin computer to a secondary operating system different than the native operating system (e.g. to a DOS operating system in a native Windows operating system computer (DOS and Windows are trademarks of Microsoft Corporation of Redmond, Wash., USA)). This is done to avoid any intervention by the native of the operating system in the next step, which is the generation of a data image of disks coupled to the origin computer, and transferring that image to the target computer. At the target computer a program analyzes the image, and makes certain modifications directed to fitting the image to the target environment. Such changes include changing drivers, changing configuration settings such as Windows registry settings in a Windows environment, or changes to inittab or RC files in a Linux environment, and the like. After the changes are affected, the transferred operating system is booted on the target computer, preferably within a virtual machine environment.
The known methods described above has several shortcomings, principle upon which is the fact that the non-native operating system is often unaware of environment nuances and other configuration settings that were made to fit the operating system to the legacy hardware. Thus for example, if the native operating system has been operating a certain disk controller, the non-native secondary operating system needs to have drivers for this particular hardware. The disk may be arranged into several partitions that the secondary operating system may not be aware of, and the like. Moreover, merely the use of a second operating system forces a reboot of the origin computer, which is often undesirable.
All of the above cited patents focus on installing or modifying an operating system so that it installs on hardware computer i.e. power it down, make a copy of its disks, and power it up again. Avoiding reboot offers the added advantage of allowing such operation to be performed remotely, avoiding the need to send personnel to the origin computer. Other problems of the known art is the lack of handling of software that is closely tied to particular hardware in the origin machine—removing this hardware can cause the application to crash the operating system.
There is therefore a clear and unresolved need for a system and method for moving an existing computer environment, including the operating system, settings, and the like, to a new computing platform using different hardware configuration and preferably without the need to shut the origin machine down during the process. The present invention provides such a system and method.